package com.xs.designpattern;

import lombok.extern.slf4j.Slf4j;

/**
 * 偷盗方法的摸板
 *
 * @author xs
 */
@Slf4j
public abstract class StealingMethod {
    /**
     * 抽象的作用目标
     *
     * @return 目标人物
     */
    protected abstract String pickTarget();

    /**
     * 抽象的迷惑目标
     * @param target 目标人物
     */
    protected abstract void confuseTarget(String target);

    /**
     * 抽象的偷窃
     * @param target 目标人物
     */
    protected abstract void stealTheItem(String target);

    /**
     * 偷
     */
    public final void steal() {
        String target = pickTarget();
        log.info("目标被选择为 {}.", target);
        confuseTarget(target);
        stealTheItem(target);
    }
}
